/******************************************************************************* * Copyright (c) 2009 EclipseSource and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * EclipseSource - initial API and implementation *******************************************************************************/ package org.eclipse.rap.interactiondesign.tests; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.rap.interactiondesign.tests.impl.ConfigurableStackImpl; import org.eclipse.rap.interactiondesign.tests.impl.ConfigurationActionImpl; import org.eclipse.rap.junit.RAPTestCase; import org.eclipse.rap.ui.interactiondesign.ConfigurableStack; import org.eclipse.rap.ui.interactiondesign.ConfigurationAction; import org.eclipse.rap.ui.interactiondesign.IConfigurationChangeListener; import org.eclipse.rap.ui.interactiondesign.PresentationFactory; import org.eclipse.rap.ui.interactiondesign.internal.ConfigurableStackProxy; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.internal.PartPane; import org.eclipse.ui.internal.ViewPane; import org.eclipse.ui.internal.presentations.PresentablePart; import org.eclipse.ui.presentations.IStackPresentationSite; import org.eclipse.ui.presentations.StackPresentation; public class ConfigurationActionTest extends RAPTestCase { private ConfigurableStackProxy proxy; private ConfigurableStack stack; private IStackPresentationSite site; private ConfigurationAction configAction; private boolean presentationChanged; private boolean toolBarChanged; protected void setUp() throws Exception { if( stack == null ) { stack = getConfigurableStack(); } if( site == null ) { site = stack.getSite(); } if( configAction == null ) { configAction = stack.getConfigAction(); } } public void testSaveAndLoadStackId() { ConfigurationAction configAction = stack.getConfigAction(); String id = stack.getStackPresentationId(); String savedStackId = ConfigurableStack.getSavedStackId( site ); String defaultString = IPreferenceStore.STRING_DEFAULT_DEFAULT; assertEquals( defaultString, savedStackId ); configAction.saveStackPresentationId( id ); savedStackId = ConfigurableStack.getSavedStackId( site ); assertEquals( id, savedStackId ); configAction.saveStackPresentationId( defaultString ); savedStackId = ConfigurableStack.getSavedStackId( site ); assertEquals( defaultString, savedStackId ); } public void testGetActionIdFromToolItem() { ToolBar bar = new ToolBar( stack.getParent(), SWT.HORIZONTAL ); ToolItem item = new ToolItem( bar, SWT.PUSH ); Action action = new Action() { }; String id = "org.eclipse.rap.actionIDTest"; action.setId( id ); ActionContributionItem actionItem = new ActionContributionItem( action ); item.setData( actionItem ); String actualId = ConfigurationAction.getActionIdFromToolItem( item ); assertEquals( id, actualId ); } public void testConfigurationChangeListener() { presentationChanged = false; toolBarChanged = false; IConfigurationChangeListener listener = new IConfigurationChangeListener() { public void presentationChanged( String newStackPresentationId ) { presentationChanged = true; } public void toolBarChanged() { toolBarChanged = true; } }; configAction.addConfigurationChangeListener( listener ); configAction.fireLayoutChange( "newId" ); assertTrue( presentationChanged ); configAction.fireToolBarChange(); assertTrue( toolBarChanged ); presentationChanged = false; toolBarChanged = false; configAction.removeLayoutChangeListener( listener ); configAction.fireLayoutChange( "newID" ); assertFalse( presentationChanged ); configAction.fireToolBarChange(); assertFalse( toolBarChanged ); } public void testGetSite() { IStackPresentationSite actualSite = configAction.getSite(); assertEquals( site, actualSite ); } public void testGetStackPresentation() { StackPresentation presentation = configAction.getStackPresentation(); assertEquals( stack, presentation ); } public void testHasPartMenu() { boolean hasPartMenu = configAction.hasPartMenu(); assertFalse( hasPartMenu ); PresentablePart part = ( PresentablePart ) site.getSelectedPart(); PartPane pane = part.getPane(); if( pane instanceof ViewPane ) { MenuManager menuManager = ( ( ViewPane ) pane ).getMenuManager(); menuManager.add( new Action() { } ); } hasPartMenu = configAction.hasPartMenu(); assertTrue( hasPartMenu ); } public void testPartMenuVisibility() { boolean visible = configAction.isPartMenuVisible(); assertFalse( visible ); configAction.savePartMenuVisibility( true ); visible = configAction.isPartMenuVisible(); assertTrue( visible ); configAction.savePartMenuVisibility( false ); visible = configAction.isPartMenuVisible(); assertFalse( visible ); } public void testPartMenuVisibilityWithGlobalValue() { boolean visible = configAction.isPartMenuVisible(); assertFalse( visible ); ConfigurationActionImpl action = ( ConfigurationActionImpl ) configAction; action.setGlobalVisibilityAttribute( true ); visible = configAction.isPartMenuVisible(); assertTrue( visible ); action.setGlobalVisibilityAttribute( false ); visible = configAction.isPartMenuVisible(); assertFalse( visible ); } public void testActionVisibility() { String viewId = "org.eclipse.view"; String actionId = "org.eclipse.action"; boolean visible = configAction.isViewActionVisibile( viewId, actionId ); assertFalse( visible ); configAction.saveViewActionVisibility( viewId, actionId, true ); visible = configAction.isViewActionVisibile( viewId, actionId ); assertTrue( visible ); configAction.saveViewActionVisibility( viewId, actionId, false ); visible = configAction.isViewActionVisibile( viewId, actionId ); assertFalse( visible ); } public void testActionVisibilityWithGlobalValue() { String viewId = "org.eclipse.view"; String actionId = "org.eclipse.action"; boolean visible = configAction.isViewActionVisibile( viewId, actionId ); assertFalse( visible ); ConfigurationActionImpl action = ( ConfigurationActionImpl ) configAction; action.setGlobalVisibilityAttribute( true ); visible = configAction.isViewActionVisibile( viewId, actionId ); assertTrue( visible ); action.setGlobalVisibilityAttribute( false ); visible = configAction.isViewActionVisibile( viewId, actionId ); assertFalse( visible ); } private ConfigurableStack getConfigurableStack() { ConfigurableStack result = null; PresentationFactory factory = PresentationFactoryTest.getPresentationFactory(); Object adapter = factory.getAdapter( StackPresentation.class ); assertTrue( adapter instanceof List ); List proxyList = ( List ) adapter; assertTrue( proxyList.size() > 0 ); boolean found = false; for( int i = 0; i < proxyList.size() && !found; i++ ) { Object element = proxyList.get( i ); assertTrue( element instanceof ConfigurableStackProxy ); proxy = ( ConfigurableStackProxy ) element; ConfigurableStack stack = proxy.getCurrentStackPresentation(); if( stack instanceof ConfigurableStackImpl ) { found = true; result = ( ConfigurableStack ) stack; } } return result; } }